캐글(kaggle) 입문하기

Sang Yeol Lee
February 23 2018

  • 일시 : 2018년 2월 24일, 시간 오후 3시20분 ~ 오후 5시50분
  • 장소 : 한국Microsoft 11층(광화문 더케이트윈타워 A동)
  • 링크 : https://kcd2018.festa.io/

캐글뽀개기 스터디 : https://www.facebook.com/groups/kagglebreak


발표 시간 튜토리얼 내용
15:20 ~ 16:20 (첫 번째 시간) 캐글 및 세팅
16:40 ~ 17:50 (두 번째 시간) 문제 풀어보기
  • 첫 번째 시간에는 1. 데스크탑에서 R/Rstudio 설치, 2. 캐글 및 데이터 과학 소개, 3. azure 세팅 안내, 4. 기본적인 R 문법 안내가 있을 예정입니다
  • 두 번째 시간부터 캐글 문제 풀어보기가 진행될 예정입니다. 1. 데이터 전처리, 2. 탐색적 데이터 분석, 3. 머신러닝, 4. 제출 등입니다.
  • 오늘 저와 같이 신청자 분들을 도와주실 봉사자님들입니다. 다들 R 사용 경험이 있으니, 코드가 막히시면 언제든지 손 들어주세요.
  • azure는 인터넷 연결이 불안정할 수 있어서 설명만 드리고 집에서 해보길 바라며 개인 노트북에서 실습 진행할 예정입니다.

자기 소개

자료 링크

  • 실습의 해당되는 데이터 및 코드는 github 및 링크를 통해 공유드립니다. github을 clone 또는 download 해주시면 됩니다.
  • 워킹캐글(캐글뽀개기 스터디 이름) Github : Tutorial Github
  • 자료 링크 : 다운로드
  • usb로 봉사자 분들이 지금부터 전달드릴 예정입니다. 본인 데스크탑으로 파일을 옮겨주세요. (R 설치파일/Rstudio 설치파일/package 설치파일/data/code 포함)

Show Time ®

summary(cars)
     speed           dist       
 Min.   : 4.0   Min.   :  2.00  
 1st Qu.:12.0   1st Qu.: 26.00  
 Median :15.0   Median : 36.00  
 Mean   :15.4   Mean   : 42.98  
 3rd Qu.:19.0   3rd Qu.: 56.00  
 Max.   :25.0   Max.   :120.00  

plot of chunk unnamed-chunk-2

1 install

(https://cran.rstudio.com/bin/windows/base/)

  • 3.4.3 최신 버전, 32/64비트

R 프로그래밍 언어(줄여서 R)는 통계 계산과 그래픽을 위한 프로그래밍 언어이자 소프트웨어 환경이다. 뉴질랜드 오클랜드 대학의 로버트 젠틀맨(Robert Gentleman)과 로스 이하카(Ross Ihaka)에 의해 시작되어 현재는 R 코어 팀이 개발하고 있다. R은 GPL 하에 배포되는 S 프로그래밍 언어의 구현으로 GNU S라고도 한다. R은 통계 소프트웨어 개발과 자료 분석에 널리 사용되고 있으며, 패키지 개발이 용이하여 통계학자들 사이에서 통계 소프트웨어 개발에 많이 쓰이고 있다.

왜 분석도구로 R인가?

  • 기존의 통계툴인 SAS, SPSS에 비해서 자유롭게 변형 가능
  • R은 데이터 분석에 특화된 프로그래밍 언어이자 오픈소스 패키지의 집합이다.
  • 프로그래밍 언어 - 자유로운 데이터 분석이 가능

    • Graphical User Interface (GUI) 를 이용한 분석 환경은 처음에는 접근이 쉬우나 확장성에 한계가 있음
    • 스스로 새로운 기능을 추가하는 것도 자유로움
  • 오픈소스 패키지의 집합 (통계, 기계학습, 금융, 생물정보학, 그래픽스)에 이르는 다양한 패키지가 무료로 제공됨.

RStudio install

Desktop Open Source License : https://www.rstudio.com/products/rstudio/download/

RStudio is a free and open-source integrated development environment (IDE) for R, a programming language for statistical computing and graphics. RStudio was founded by JJ Allaire,[5] creator of the programming language ColdFusion. Hadley Wickham is the Chief Scientist at RStudio

2. 캐글 및 데이터 과학 소개

Kaggle - https://www.kaggle.com

- Wikipedia - Kaggle?

  • Kaggle은 기업 및 연구원이 데이터 및 통계를 게시하고 데이터 마이너가 예측 및 설명을 위한 최상의 모델을 만들기 위해 경쟁하는 예측 모델링 및 분석 경쟁을위한 플랫폼. Crowdsourcing 접근 방식은 예측 모델링 작업에 적용 할 수있는 무수한 전략이 있으며 어떤 기술 또는 분석가가 가장 효과적인지를 처음부터 알 수 없다는 사실에 의존

데이터 과학이란 무엇인가?

  • 데이터 과학? 인공지능? 머신러닝? 데이터 분석?
  • 데이터 과학자에 관한 하버드 비즈니스 리뷰에 따르면, 21세기 가장 인기있는 직업이 데이터 과학자로 친송받고 있음
  • 데이터 랭글링에 관한 뉴욕타임즈에 따르면 데이터 과학자 시간의 50% ~ 80% 시간을 데이터를 수집, 준비, 정제 등의 노동집약적인 작업에 소모하는 것으로 보고되고 있다.

데이터 과학의 피라미드

  • 데이터 과학의 피라미드 (Monica Rogati’s fantastic Medium post “The AI Hierarchy of Needs”)

  • 인공지능은 피라미드의 꼭대기라고 표현하는데 프레임 워 크를 접근하기 위해서 결국 데이터 수집부터 되어 있어야 함

Oreilly 미디어의 2017 European Data Science Salary (1)

  • 유럽 응답자의 상위 4 개 도구는 모든 응답자의 절반 이상이 사용하는 Excel, SQL, R 및 PYTHON
  • 네 가지 도구는 데이터 급여 설문 조사에서 최고 순위를 지키고 있음.

Oreilly 미디어의 2017 European Data Science Salary (2)

  • 보편적인 작업 중에는 “기본 탐색 데이터 분석”, “데이터 정리”, “시각화 만들기” 및 “연구 질문에 답변하기 위한 데이터 분석 수행"이 주로 포함됨

  • 높은 급여와 가장 밀접하게 관련이 있는 업무는 "비즈니스 의사 결정자에게 결과 통보”, “분석으로 해결할 비즈니스 문제 식별”, “팀 프로젝트 구성 및 안내”

Machine-learning odysse

  • 머신러닝 기술은 문제(비즈니스 적용)를 풀기 위해서 예측, 분류, 추천 모두에 쓰입니다

Machine-learning 종류 (1)

Machine-learning 종류 (2)

Machine-learning 종류 (3)

캐글 가입

캐글 대회

택시 문제

- 택시 문제

  • 뉴욕시에서 택시 여행의 총 주행 거리를 예측하는 모델을 만드는 것에 도전

  • 기본 데이터 세트는 픽업 시간, 지리적 좌표, 승객 수 및 기타 여러 변수가 포함 된 NYC 택시 및 리무진위원회에서 발급 한 데이터 세트

택시 데이터 (1)

택시 데이터 (2)

  • Google Cloud Platform의 Big Query에서 제공되는 2016 년 NYC Yellow Cab 여행 기록 데이터를 기반으로 함

  • 데이터는 경쟁의 목적을 위해 샘플링되고 클리닝 되었음

  • 참가자는 개별 여행 속성에 따라 테스트 세트의 각 여행 기간을 예측해야 합니다.

데이터 필드

  • id : 각 출장의 고유 식별자
  • vendor_id : 여행 기록과 연결된 공급자를 나타내는 코드
  • pickup_datetime : 미터가 작동 된 날짜와 시간
  • dropoff_datetime : 미터가 분리 된 날짜와 시간
  • passenger_count : 차량의 승객 수 (운전자가 입력 한 값)
  • pickup_longitude : 미터가 사용 된 경도
  • pickup_latitude : 미터가 사용 된 위도
  • dropoff_longitude : 미터가 분리 된 경도
  • dropoff_latitude : 미터가 분리 된 위도
  • store_and_fwd_flag : 플래그는 자동차가 서버에 연결되어 있지 않아 여행 기록이 차량 메모리에 보관되었는지 여부를 나타냅니다. (Y = 저장 및 전달; N = 상점 및 순회 여행 불가)
  • trip_duration : 여행 기간 (초)

택시 대회 평가기준

평가함수(Evalution)

  • RMSLE(Root Mean Squared Logarithmic Error) \[ \epsilon = \sqrt{\frac{1}{n} \sum_{i=1}^n (\log(p_i + 1) - \log(a_i+1))^2 } \]

  • Submission File For every row in the dataset, submission files should contain two columns: id and trip_duration. The id corresponds to the column of that id in the test.csv. The file should contain a header and have the following format:

id,trip_duration
id00001,978
id00002,978
id00003,978
id00004,978
etc.

3 Azure 소개 (1)

  • 오늘 Azure를 사용하기엔 시간이 오래걸리므로 쿠폰 등록 및 설정하는 방법만 공유할 예정입니다.
  • 집에 가서 꼭 해보시고 모르시면 저한테 이메일 주세요.

3 Azure 소개 (2)

3 Azure 소개 (3)

  • 로그인하면 azure portal이 보입니다.

  • 리소스 만들기를 하면 우분투 서버 16.04 LTS VM이 있습니다. 눌러주세요.

3 Azure 소개 (4)

3 Azure 소개 (5)

  • 가상머신 크기는 D2S_V3 표준을 사용하면 됩니다.

  • 옵션은 defalut로 가겠습니다

3 Azure 소개 (6)

  • 동의하고 만드시면 됩니다. 이후에 리소스 생성 시간이 오래걸려서 실습은 하지 않겠습니다.

3 Azure 소개 (7)

  • 만들어지면 배포 성공되었다고 알람이 옵니다

  • 포털에서 확인해보실 수 있습니다.

3 Azure 소개 (8)

  • 네트워크 규칙을 추가해주셔야 합니다 (인바운드 규칙)
  • 일반적으로 포트는 몇가지 뚫어주셔야 합니다.
  • Rstudio-server의 Default 포트 번호는 8787입니다. 그 외에 jupyter 8888, mysql 3306, http 80 등도 뚫어주면 좋습니다. 물론.. 오늘 하진 않겠습니다.

3 Azure 소개 (9)

3 Azure 소개 (10)

  • 리소스의 공용 ip 주소를 확인해서 접속하시면 됩니다.
  • 기본 root 계정은 azureuser 동일합니다.

  • 이후에 추가 작업은 다음과 같은 것을 해주면 좋습니다.
  • 계정 추가, 추가된 계정 sudo 권한 설정, ssh 없이 접속하는 방법 추가, 패키지 업데이트 / 업그레이드, R, Rstudio, Python3 등 설치, 라이브러리 쥬피터 설치 및 설정 등
  • 자세한 내용은 오늘 튜토리얼에서 다루지 않겠습니다. 이전에 파이콘2017에서 제가 발표했던 aws 튜토리얼 내용을 똑같이 참고하시면 쉽게 하실 수 있습니다. python korea 2017 aws tutorial

4 R 기본 문법 소개

  • 마지막 차례입니다. 아까 설치하셨던 Rstudio을 띄우시길 바랍니다.

  • 상단 위의 File->New File->R script로 열어주셔도 되고 해당 Rmd(R전용 마크다운) 파일 또는 Rpres 에서 실행해보셔도 됩니다.

벡터

  • 벡터의 모든 원소들은 정수형, 숫자형, 문자, 논리형, 복소수형 같은 형식을 지님.
x <- c(88,5,12,13)
x <- c(x[1:3], 168, x[4])
x
[1]  88   5  12 168  13
length(x)
[1] 5

행렬과 배열을 벡터처럼 사용하기

m <- matrix(c(1,2,3,4), nrow=2)
m 
     [,1] [,2]
[1,]    1    3
[2,]    2    4
m + 10:13
     [,1] [,2]
[1,]   11   15
[2,]   13   17

연산자로 유용한 벡터 생성하기

5:8
[1] 5 6 7 8
5:1
[1] 5 4 3 2 1
#for (i in 1:length(x)){}
seq(from=12, to=30, by=3)
[1] 12 15 18 21 24 27 30

rep()를 이용해 숫자 반복 벡터 만들기

x <- rep(8,4)
x
[1] 8 8 8 8
rep(c(5,12,13),3)
[1]  5 12 13  5 12 13  5 12 13
rep(1:3,2)
[1] 1 2 3 1 2 3

NA 사용하기

  • 존재하지만 불확실한 값이 아닌 아예 답이 없는 경우에는 NULL 값
x <- c(88,NA,12,168,13)
x
[1]  88  NA  12 168  13
mean(x)
[1] NA
mean(x, na.rm=T)
[1] 70.25
x <- c(88,NULL,12,168,13)
mean(x, na.rm=T)
[1] 70.25

NULL 사용하기

  • NULL의 용도 중 하나는 반복문에서 매번 원소를 추가해가며 벡터를 생성할 때 쓰는 것.
z <- NULL
for (i in 1:10) if (i %%2 == 0) z <- c(z,i)
z
[1]  2  4  6  8 10

데이터 프레임

  • 데이터 프레임은 행과 열의 2차원 구조를 가진 행렬.
  • 각 열이 다른 형식을 취할 수 있다는 점이 행렬과 다름.
  • 예를 들어 한 열은 숫자로, 다른 한열은 문자열로 구성될 수 있음.
aburl = 'http://archive.ics.uci.edu/ml/machine-learning-databases/abalone/abalone.data'

abnames = c('sex','length','diameter','height','weight.w','weight.s','weight.v','weight.sh','rings')

abalone = read.table(aburl, header = F , sep = ',', col.names = abnames)

head(abalone)
  sex length diameter height weight.w weight.s weight.v weight.sh rings
1   M  0.455    0.365  0.095   0.5140   0.2245   0.1010     0.150    15
2   M  0.350    0.265  0.090   0.2255   0.0995   0.0485     0.070     7
3   F  0.530    0.420  0.135   0.6770   0.2565   0.1415     0.210     9
4   M  0.440    0.365  0.125   0.5160   0.2155   0.1140     0.155    10
5   I  0.330    0.255  0.080   0.2050   0.0895   0.0395     0.055     7
6   I  0.425    0.300  0.095   0.3515   0.1410   0.0775     0.120     8
str(abalone)
'data.frame':   4177 obs. of  9 variables:
 $ sex      : Factor w/ 3 levels "F","I","M": 3 3 1 3 2 2 1 1 3 1 ...
 $ length   : num  0.455 0.35 0.53 0.44 0.33 0.425 0.53 0.545 0.475 0.55 ...
 $ diameter : num  0.365 0.265 0.42 0.365 0.255 0.3 0.415 0.425 0.37 0.44 ...
 $ height   : num  0.095 0.09 0.135 0.125 0.08 0.095 0.15 0.125 0.125 0.15 ...
 $ weight.w : num  0.514 0.226 0.677 0.516 0.205 ...
 $ weight.s : num  0.2245 0.0995 0.2565 0.2155 0.0895 ...
 $ weight.v : num  0.101 0.0485 0.1415 0.114 0.0395 ...
 $ weight.sh: num  0.15 0.07 0.21 0.155 0.055 0.12 0.33 0.26 0.165 0.32 ...
 $ rings    : int  15 7 9 10 7 8 20 16 9 19 ...
dim(abalone)
[1] 4177    9

요인(Factors)

  • 앞의 str() 함수의 결과에서 sex 변수를 주목
  • 요인(factor)는 일종의 레이블로서 사례들을 몇가지 범주(category)로 정리하기 위해 사용됨. 각 범주의 이름은 레벨(level)이라고 부름
  • 내부적으로 각 범주에 대해 1부터 시작하는 숫자를 붙임
str(abalone$sex)
 Factor w/ 3 levels "F","I","M": 3 3 1 3 2 2 1 1 3 1 ...
class(abalone$sex)
[1] "factor"
  • 문자열이 요인으로 변환되는 것이 싫으면 데이터프레임을 만들 때 stringsAsFactros=FALSE 옵션을 줄 수 있음.
summary(abalone)
 sex          length         diameter          height      
 F:1307   Min.   :0.075   Min.   :0.0550   Min.   :0.0000  
 I:1342   1st Qu.:0.450   1st Qu.:0.3500   1st Qu.:0.1150  
 M:1528   Median :0.545   Median :0.4250   Median :0.1400  
          Mean   :0.524   Mean   :0.4079   Mean   :0.1395  
          3rd Qu.:0.615   3rd Qu.:0.4800   3rd Qu.:0.1650  
          Max.   :0.815   Max.   :0.6500   Max.   :1.1300  
    weight.w         weight.s         weight.v        weight.sh     
 Min.   :0.0020   Min.   :0.0010   Min.   :0.0005   Min.   :0.0015  
 1st Qu.:0.4415   1st Qu.:0.1860   1st Qu.:0.0935   1st Qu.:0.1300  
 Median :0.7995   Median :0.3360   Median :0.1710   Median :0.2340  
 Mean   :0.8287   Mean   :0.3594   Mean   :0.1806   Mean   :0.2388  
 3rd Qu.:1.1530   3rd Qu.:0.5020   3rd Qu.:0.2530   3rd Qu.:0.3290  
 Max.   :2.8255   Max.   :1.4880   Max.   :0.7600   Max.   :1.0050  
     rings       
 Min.   : 1.000  
 1st Qu.: 8.000  
 Median : 9.000  
 Mean   : 9.934  
 3rd Qu.:11.000  
 Max.   :29.000  
  • summary()는 str()가 비슷한 결과를 내보내나, 좀 더 통계적인 요약에 강하다.
  • 데이터프레임의 모든 열은 길이가 같아야 함을 상기

Iris 데이터

19세기 말-20세기 초의 유명 통계학자인 피셔(R. A. Fisher)가 연구한 데이터로서, 붓꽃(iris)의 3가지 종(setosa, versicolor, virginica)에 대해 꽃받침(sepal)과 꽃잎(petal)의 길이를 정리한 데이터
head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
str(iris)
'data.frame':   150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

apply 함수

  • 벡터, 행렬, 리스트, 데이터 프레임 등에 임의의 함수를 적용한 결과를 얻기 위한 함수들 :apply, lapply, sapply, tapply
head(iris, 3)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
apply(iris[,1:4], 2, sum)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
       876.5        458.6        563.7        179.9 
lapply(iris[,1:4], mean)
$Sepal.Length
[1] 5.843333

$Sepal.Width
[1] 3.057333

$Petal.Length
[1] 3.758

$Petal.Width
[1] 1.199333
sapply(iris[,1:4], mean)
Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
    5.843333     3.057333     3.758000     1.199333 

Tidyverse를 배우자 (1)

  • Teach the tidyverse to beginners

  • 해들리 위컴

    • 해들리 위컴 위키피디아
    • 뉴질랜드 출신 데이터 과학자
    • Tidy data라는 데이터 저장 방식을 제안
    • Adjunct Professor of statistics at the University of Auckland[3], Stanford University[4], and Rice University
    • Rstudio Chief Data Scientist
  • Tidy Data?

    • 각 변수는 하나의 컬럼에 해당됩니다.
    • 각 관찰은 하나의 행에 해당됩니다.
    • 한 관찰 유형은 하나의 테이블에 형성됩니다.
    • Tidy Data

Tidyverse를 배우자 (2)

Tidyverse를 공부하면서

  • tidyverse는 공통된 디자인 철학을 공유하는 데이터 조작, 탐색 및 시각화를위한 일관된 패키지 시스템

  • 대부분 Hadley Wickham 자신에 의해 개발되었지만, 현재 그들은 여러 공헌자들에 의해 확장되고 있습니다.

  • The tidyverse style guide [http://style.tidyverse.org/]

  • 데이터 분석은 '가설 생성', '가설 확인'의 과정.

  • 개렛 그레 몰드, 해들리 위컴에게 감사의 말을 전함.

  • 데이터 과학의 도구로서 R은 패키지들의 집합으로 기본 함수보다 여러가지 형태로 함수가 존재함. base 함수의 이해가 끝났다면 tidyverse, caret 두 가지만 제대로 배운다면 데이터 전처리, 시각화, 모델링, 평가까지 한번에 할 수 있음

첫 번째 시간 종료하겠습니다.

  • 두 번째 시간부터 캐글 문제 풀어보기가 진행될 예정입니다. 1. 데이터 전처리, 2. 탐색적 데이터 분석, 3. 머신러닝, 4. 제출 등입니다.
  • 20분 간 휴식하겠습니다. 쉬면서 모르거나 잘 안되시는 것은 물어봐주세요.